<!--人员列表-->
<!--可单独使用-->
<!--可由公司部门树选择调用使用，由props:onlyStaff布尔值结合Bus控制-->
<template>
    <a-tree-select
        v-bind="$attrs"
        v-on="$listeners"
        style="width: 100%"
        :tree-data="treeData"
        :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
        :tree-checkable="treeCheckable"
        :replaceFields="treeReplace"
        :show-checked-strategy="showCheckedStrategyStaff"
        @treeExpand="handleTreeExpand"
        @select="handleSelect"
        @change="handleChange"
    />

</template>

<script>
  import Bus from '@/tool/Bus.js'
  import { TreeSelect } from 'ant-design-vue';
  import { getStaffAll } from '@/api/subassembly/TreeSelectOrganization';
  const SHOW_ALL = TreeSelect.SHOW_ALL; //显示所有选中节点(包括父节点).
  const SHOW_PARENT = TreeSelect.SHOW_PARENT; //只显示父节点(当父节点下所有子节点都选中时)
  const SHOW_CHILD = TreeSelect.SHOW_CHILD; //默认只显示子节点.
  export default {
    name: 'Staff',
    props:{
      /**
       * @description: 定义选中项回填的方式
       * @param {} SHOW_ALL  显示所有选中节点(包括父节点).
       * @param {} SHOW_PARENT  只显示父节点(当父节点下所有子节点都选中时)
       * @param {} SHOW_CHILD  默认只显示子节点
       */
      showCheckedStrategyStaff:{
        default: SHOW_CHILD
      },
      treeCheckable: { // 是否有复选框
        type: Boolean,
        default: false
      },
      // onlyStaff: { //暂不支持单独组件使用
      //   type: Boolean,
      //   default: false
      // },
    },
    data(){
      return {
        treeData: [],
        treeReplace:{
          title: 'name',
          value:'id',
          key:'id',
        },
      }
    },
    created() {
      Bus.$off('GetStaff')  
      Bus.$on('GetStaff', this.getStaffAll)
    },
    methods: {
      /**
       * @description: 获取对应人员列表
       * @description: 不需要联动，请求所有人员，当前暂不支持；
       * @description: 联动职位，参数名为：postId；
       * @description: 联动组织，参数名为：orgId；
       * @param {object} value  选中树节点的值
       */
      getStaffAll(val){
        if(val.selected){
          let params = {}
          if(val.haveJobs){
            params = {postId: val.triggerValue} //jobs联动的Id
          }else {
            params = {orgId: val.triggerValue} //org联动的Id
          }
          this.clearEmit()
          this.treeData =[]
          getStaffAll(params).then(res => {
            if(res.status === 200){
              this.treeData = res.data
            }
          }).catch(err => {
            console.log(err)
          })
        }else {
          this.treeData =[]
          this.clearEmit()
        }
      },
      /**
       * @description: 展开节点时调用
       * @param {object} expandedKeys 展开节点时的对象
       */
      handleTreeExpand(expandedKeys){
        this.$emit('update:expandedKeys', expandedKeys)
        // this.$emit('handleExpanded', expandedKeys)
      },
      /**
       * @description: 被选中时调用
       * @param {string} value 被选中时调用的id字符串
       */
      handleSelect(value, node, extra){
        this.$emit('update:selectValue', value)
        // this.$emit('handleSelect', value)
      },
      /**
       * @description: 选中树节点时调用此函数
       * @param {object} value  选中树节点的id
       * @param {object} label  选择树节点的文本信息对象
       */
      handleChange(value, label, extra){
        this.$emit('update:selectedValue', value)
        this.$emit('update:selectedLabel', label)
        // this.$emit('handleChange', extra.triggerNode.dataRef)
      },
      clearEmit(){
        this.$emit('update:expandedKeys')
        this.$emit('update:selectValue')
        this.$emit('update:selectedValue')
        this.$emit('update:selectedLabel')
      }

    }
  }
</script>
